#!/usr/bin/env node

/**
 * 开发环境启动脚本
 * 用于快速启动开发服务器并进行环境检查
 */

const { execSync } = require('child_process')
const fs = require('fs')
const path = require('path')

// 颜色输出
const colors = {
  reset: '\x1b[0m',
  bright: '\x1b[1m',
  red: '\x1b[31m',
  green: '\x1b[32m',
  yellow: '\x1b[33m',
  blue: '\x1b[34m',
  magenta: '\x1b[35m',
  cyan: '\x1b[36m'
}

function log(message, color = 'reset') {
  console.log(`${colors[color]}${message}${colors.reset}`)
}

function checkNodeVersion() {
  const nodeVersion = process.version
  const majorVersion = parseInt(nodeVersion.slice(1).split('.')[0])
  
  log('🔍 检查 Node.js 版本...', 'cyan')
  log(`   当前版本: ${nodeVersion}`, 'blue')
  
  if (majorVersion < 16) {
    log('❌ Node.js 版本过低，需要 16.0 或更高版本', 'red')
    process.exit(1)
  }
  
  log('✅ Node.js 版本检查通过', 'green')
}

function checkPackageManager() {
  log('🔍 检查包管理器...', 'cyan')
  
  try {
    execSync('npm --version', { stdio: 'ignore' })
    log('✅ npm 可用', 'green')
    return 'npm'
  } catch (error) {
    log('❌ npm 不可用', 'red')
    process.exit(1)
  }
}

function checkDependencies() {
  log('🔍 检查依赖安装...', 'cyan')
  
  const nodeModulesPath = path.join(process.cwd(), 'node_modules')
  
  if (!fs.existsSync(nodeModulesPath)) {
    log('❌ 依赖未安装，请先运行 npm install', 'red')
    process.exit(1)
  }
  
  log('✅ 依赖检查通过', 'green')
}

function checkEnvironment() {
  log('🔍 检查环境配置...', 'cyan')
  
  const envFiles = ['.env', '.env.development']
  let hasEnvFile = false
  
  envFiles.forEach(file => {
    if (fs.existsSync(path.join(process.cwd(), file))) {
      log(`✅ 找到环境配置文件: ${file}`, 'green')
      hasEnvFile = true
    }
  })
  
  if (!hasEnvFile) {
    log('⚠️  未找到环境配置文件，将使用默认配置', 'yellow')
  }
}

function displayInfo() {
  log('\n🚀 ZenithMind在线教育一体化平台', 'bright')
  log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━', 'cyan')
  log('📦 项目信息:', 'bright')
  log('   • 框架: Vue 3 + Vite', 'blue')
  log('   • UI库: Element Plus', 'blue')
  log('   • 状态管理: Pinia', 'blue')
  log('   • 路由: Vue Router 4', 'blue')
  log('   • 样式: SCSS', 'blue')
  log('')
  log('🌐 访问地址:', 'bright')
  log('   • 本地: http://localhost:3000', 'green')
  log('   • 网络: http://0.0.0.0:3000', 'green')
  log('')
  log('📚 功能模块:', 'bright')
  log('   • 智能课堂 • 在线考试 • 编程实战 • 学习任务', 'blue')
  log('   • 资讯中心 • 数字图书馆 • 学习商城 • 版本控制', 'blue')
  log('   • AI助手 • 学习笔记 • 文档中心 • 云端网盘', 'blue')
  log('   • 社交聊天 • 技术博客 • 用户中心', 'blue')
  log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━', 'cyan')
}

function startDev() {
  log('\n🚀 启动开发服务器...', 'cyan')
  
  try {
    execSync('npm run dev', { stdio: 'inherit' })
  } catch (error) {
    log('❌ 启动失败', 'red')
    process.exit(1)
  }
}

function main() {
  console.clear()
  
  displayInfo()
  
  log('\n🔧 环境检查中...', 'yellow')
  
  checkNodeVersion()
  checkPackageManager()
  checkDependencies()
  checkEnvironment()
  
  log('\n✅ 环境检查完成', 'green')
  
  startDev()
}

// 处理未捕获的异常
process.on('uncaughtException', (error) => {
  log(`❌ 未捕获的异常: ${error.message}`, 'red')
  process.exit(1)
})

process.on('unhandledRejection', (reason, promise) => {
  log(`❌ 未处理的 Promise 拒绝: ${reason}`, 'red')
  process.exit(1)
})

// 处理 Ctrl+C
process.on('SIGINT', () => {
  log('\n👋 再见！', 'yellow')
  process.exit(0)
})

main()
